<p>在考场里，有&nbsp;<code>n</code>&nbsp;个座位排成一行，编号为 <code>0</code> 到 <code>n - 1</code>。</p>

<p>当学生进入考场后，他必须坐在离最近的人最远的座位上。如果有多个这样的座位，他会坐在编号最小的座位上。(另外，如果考场里没有人，那么学生就坐在 <code>0</code> 号座位上。)</p>

<p>设计一个模拟所述考场的类。</p>

<p>实现&nbsp;<code>ExamRoom</code>&nbsp;类：</p>

<ul>
	<li><code>ExamRoom(int n)</code> 用座位的数量&nbsp;<code>n</code> 初始化考场对象。</li>
	<li><code>int seat()</code> 返回下一个学生将会入座的座位编号。</li>
	<li><code>void leave(int p)</code> 指定坐在座位 <code>p</code> 的学生将离开教室。保证座位 <code>p</code> 上会有一位学生。</li>
</ul>

<p>&nbsp;</p>

<p><strong>示例 1：</strong></p>

<pre>
<strong>输入：</strong>
["ExamRoom", "seat", "seat", "seat", "seat", "leave", "seat"]
[[10], [], [], [], [], [4], []]
<strong>输出：</strong>
[null, 0, 9, 4, 2, null, 5]
<strong>解释：</strong>
ExamRoom examRoom = new ExamRoom(10);
examRoom.seat(); // 返回 0，房间里没有人，学生坐在 0 号座位。
examRoom.seat(); // 返回 9，学生最后坐在 9 号座位。
examRoom.seat(); // 返回 4，学生最后坐在 4 号座位。
examRoom.seat(); // 返回 2，学生最后坐在 2 号座位。
examRoom.leave(4);
examRoom.seat(); // 返回 5，学生最后坐在 5 号座位。
</pre>

<p>&nbsp;</p>

<p><strong>提示：</strong></p>

<ol>
	<li><code>1 &lt;= n &lt;= 10<sup>9</sup></code></li>
	<li>保证有学生正坐在座位 <code>p</code> 上。</li>
	<li><code>seat</code>&nbsp;和&nbsp;<code>leave</code>&nbsp;最多被调用&nbsp;<code>10<sup>4</sup></code>&nbsp;次。</li>
</ol>
